/**
 * 用户服务API
 * 提供用户认证、用户管理等相关接口
 * @author WeChat Mini Program Team  
 * @since 2025-08-13
 */

const Request = require('./request');

class UserService {
  constructor() {
    this.service = 'user';
  }

  /**
   * 用户注册
   * @param {Object} userData 用户注册信息
   * @param {string} userData.username 用户名
   * @param {string} userData.password 密码  
   * @param {string} userData.email 邮箱
   * @param {string} userData.phone 手机号
   * @returns {Promise<Object>} 注册结果
   */
  async register(userData) {
    return Request.post('/users/auth/register', userData, {
      service: this.service,
      showLoading: true,
      loadingText: '注册中...'
    });
  }

  /**
   * 用户登录
   * @param {Object} loginData 登录信息
   * @param {string} loginData.username 用户名
   * @param {string} loginData.password 密码
   * @returns {Promise<Object>} 登录结果
   */
  async login(loginData) {
    return Request.post('/users/auth/login', loginData, {
      service: this.service,
      showLoading: true,
      loadingText: '登录中...'
    });
  }

  /**
   * 微信登录
   * @param {Object} loginData 登录数据
   * @param {string} loginData.code 微信登录code
   * @param {string} loginData.encrypted_data 加密数据（可选）
   * @param {string} loginData.iv 初始化向量（可选）
   * @returns {Promise<Object>} 登录结果
   */
  async wechatLogin(loginData) {
    return Request.post('/users/auth/wechat-login', loginData, {
      service: this.service,
      showLoading: true,
      loadingText: '登录中...'
    });
  }

  /**
   * 刷新Token
   * @param {string} refreshToken 刷新令牌
   * @returns {Promise<Object>} 新的Token信息
   */
  async refreshToken(refreshToken) {
    return Request.post('/users/auth/refresh-token', {}, {
      service: this.service,
      headers: {
        'Refresh-Token': refreshToken
      }
    });
  }

  /**
   * 获取用户详情
   * @param {number} userId 用户ID
   * @returns {Promise<Object>} 用户详情
   */
  async getUserDetail(userId) {
    return Request.get(`/users/${userId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取用户列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 用户列表
   */
  async getUserList(params = {}) {
    return Request.get('/users', params, {
      service: this.service
    });
  }

  /**
   * 更新用户信息
   * @param {number} userId 用户ID
   * @param {Object} userData 用户数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateUser(userId, userData) {
    return Request.put(`/users/${userId}`, userData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 删除用户
   * @param {number} userId 用户ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteUser(userId) {
    return Request.delete(`/users/${userId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除中...'
    });
  }

  /**
   * 获取当前用户信息
   * @returns {Promise<Object>} 当前用户信息
   */
  async getCurrentUser() {
    return Request.get('/users/me', {}, {
      service: this.service
    });
  }

  /**
   * 更新当前用户信息
   * @param {Object} userData 用户数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateCurrentUser(userData) {
    return Request.put('/users/me', userData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 修改密码
   * @param {Object} passwordData 密码数据
   * @param {string} passwordData.oldPassword 旧密码
   * @param {string} passwordData.newPassword 新密码
   * @returns {Promise<Object>} 修改结果
   */
  async changePassword(passwordData) {
    return Request.post('/users/change-password', passwordData, {
      service: this.service,
      showLoading: true,
      loadingText: '修改中...'
    });
  }

  /**
   * 获取用户收藏列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.type 收藏类型
   * @returns {Promise<Object>} 收藏列表
   */
  async getUserFavorites(params = {}) {
    return Request.get('/users/favorites', params, {
      service: this.service
    });
  }

  /**
   * 添加收藏
   * @param {Object} favoriteData 收藏数据
   * @param {string} favoriteData.type 类型
   * @param {number} favoriteData.refId 关联ID
   * @returns {Promise<Object>} 添加结果
   */
  async addFavorite(favoriteData) {
    return Request.post('/users/favorites', favoriteData, {
      service: this.service,
      showError: true
    });
  }

  /**
   * 取消收藏
   * @param {number} favoriteId 收藏ID
   * @returns {Promise<Object>} 取消结果
   */
  async removeFavorite(favoriteId) {
    return Request.delete(`/users/favorites/${favoriteId}`, {
      service: this.service
    });
  }

  /**
   * 获取用户消息列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.type 消息类型
   * @returns {Promise<Object>} 消息列表
   */
  async getUserMessages(params = {}) {
    return Request.get('/users/messages', params, {
      service: this.service
    });
  }

  /**
   * 标记消息为已读
   * @param {number} messageId 消息ID
   * @returns {Promise<Object>} 标记结果
   */
  async markMessageRead(messageId) {
    return Request.put(`/users/messages/${messageId}/read`, {}, {
      service: this.service
    });
  }

  /**
   * 批量标记消息为已读
   * @param {Array<number>} messageIds 消息ID数组
   * @returns {Promise<Object>} 标记结果
   */
  async markMessagesRead(messageIds) {
    return Request.put('/users/messages/batch-read', {
      messageIds
    }, {
      service: this.service
    });
  }

  /**
   * 获取用户活动记录
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.type 活动类型
   * @returns {Promise<Object>} 活动记录
   */
  async getUserActivities(params = {}) {
    return Request.get('/users/activities', params, {
      service: this.service
    });
  }

  /**
   * 获取用户发布的帖子
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.status 帖子状态
   * @returns {Promise<Object>} 帖子列表
   */
  async getUserPosts(params = {}) {
    return Request.get('/users/posts', params, {
      service: this.service
    });
  }

  /**
   * 获取用户统计信息
   * @returns {Promise<Object>} 统计信息
   */
  async getUserStats() {
    return Request.get('/users/stats', {}, {
      service: this.service
    });
  }

  /**
   * 上传头像
   * @param {string} filePath 文件路径
   * @returns {Promise<Object>} 上传结果
   */
  async uploadAvatar(filePath) {
    return Request.uploadFile(filePath, {
      name: 'avatar',
      service: this.service,
      loadingText: '上传头像中...'
    });
  }

  /**
   * 绑定手机号
   * @param {Object} phoneData 手机号数据
   * @param {string} phoneData.encryptedData 加密数据
   * @param {string} phoneData.iv 初始化向量
   * @returns {Promise<Object>} 绑定结果
   */
  async bindPhone(phoneData) {
    return Request.post('/users/bind-phone', phoneData, {
      service: this.service,
      showLoading: true,
      loadingText: '绑定中...'
    });
  }

  /**
   * 解绑手机号
   * @returns {Promise<Object>} 解绑结果
   */
  async unbindPhone() {
    return Request.post('/users/unbind-phone', {}, {
      service: this.service,
      showLoading: true,
      loadingText: '解绑中...'
    });
  }

  /**
   * 注销账户
   * @param {Object} confirmData 确认数据
   * @param {string} confirmData.password 密码确认
   * @returns {Promise<Object>} 注销结果
   */
  async deleteAccount(confirmData) {
    return Request.post('/users/delete-account', confirmData, {
      service: this.service,
      showLoading: true,
      loadingText: '注销中...'
    });
  }

  /**
   * 反馈建议
   * @param {Object} feedbackData 反馈数据
   * @param {string} feedbackData.content 反馈内容
   * @param {string} feedbackData.type 反馈类型
   * @param {string} feedbackData.contact 联系方式
   * @returns {Promise<Object>} 提交结果
   */
  async submitFeedback(feedbackData) {
    return Request.post('/users/feedback', feedbackData, {
      service: this.service,
      showLoading: true,
      loadingText: '提交中...'
    });
  }
}

module.exports = new UserService();
